home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 081 / opus100b.arc / ONODE144.ARC / OPUSNODE.C < prev    next >
Text File  |  1987-07-12  |  14KB  |  361 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*               The Opus Computer-Based Conversation System                */
  3. /*                                                                          */
  4. /*       (c) Copyright 1987, Wynn Wagner III, All Rights Reserved           */
  5. /*                                                                          */
  6. /*                                                                          */
  7. /*                                                                          */
  8. /*                                                                          */
  9. /* OPUSNODE: Node list compiler for Opus-Cbcs, v0.00                        */
  10. /*                                                                          */
  11. /* COMPILER: MicroSoft C, v4.00                                             */
  12. /* Modified to use Lattice C, v.3.1 (3/10/87 Wes Cowley)            */
  13. /*                                                                          */
  14. /*                                                                          */
  15. /*                                                                          */
  16. /* NOTICES/WARNINGS/THREATS:                                                */
  17. /*                                                                          */
  18. /* This source code is NOT public domain.  It has a copyright.  You are     */
  19. /* hereby given a limited license (permission) to use this source code in   */
  20. /* any manner you see fit as long as you do not get any consideration other */
  21. /* than goodwill from your efforts.  In other words, this material is not   */
  22. /* available for use in any product that is sold (including so-called       */
  23. /* ShareWare).    If you use this source code in any manner, then your end    */
  24. /* result must be freely available.                                         */
  25. /*                                                                          */
  26. /* Also, you may not make money from the transfer of this source code.      */
  27. /* In other words, you may not charge others for access to the material.    */
  28. /* This includes transfer by diskette.  It also means that BBS's and other  */
  29. /* systems which charge a fee are not allowed to keep this material on-line */
  30. /* for download.                                                            */
  31. /*                                                                          */
  32. /* OPUS software is always free.  Period.  No exceptions.                   */
  33. /*                                                                          */
  34. /* Nothing in this file is warranted or guaranteed to do anything except    */
  35. /* take up disk space.  If you cannot live without some warranty and/or     */
  36. /* guarantee, them please don't use this material.                          */
  37. /*                                                                          */
  38. /*--------------------------------------------------------------------------*/
  39.  
  40. /*==========================================================================*/
  41. /*  U P D A T E   H I S T O R Y                         */
  42. /*--------------------------------------------------------------------------*/
  43. /* 03/10/87: Modified to use Lattice C v3.1.                    */
  44. /*         Allowed processing of HUB entries.                 */
  45. /*         Added -h option to prevent HUB entries from being written        */
  46. /*            to output files.                        */
  47. /*         Released version 1.3.0 for testing.                */
  48. /*                                        */
  49. /* 03/28/87: Allowed handling (read ignoring) of IGATE, OGATE, and GATE     */
  50. /*         entries.    They are treated just like HUB entries at this        */
  51. /*         point.                                */
  52. /*         Invalid node flags are no longer fatal.   This includes the    */
  53. /*         semicolon some people were complaining about...            */
  54. /*         Code to parse the nodelist entries was moved out of main() to  */
  55. /*         parseit().                             */
  56. /*         Multiple node designators (a hub which is also a gate) are no  */
  57. /*         longer poison.                            */
  58. /*         Released version 1.3.1.                        */
  59. /* 04/05/87: Added version 6 nodelist.sys support.                */
  60. /*         Not all new fields are supported.                    */
  61. /*         Added -v option to select version of nodelist.            */
  62. /*         Sent version 1.4.0 to Wynn & others for testing.            */
  63. /* 07/03/87: Added node level passwords.                    */
  64. /*         Sent version 1.4.2 to Vince                    */
  65. /* 07/11/87: Fixed node level passwords.                    */
  66. /*         Sent version 1.4.3 to Vince                    */
  67. /* 07/12/87: Added '=' password macro.                                      */
  68. /*         Sent version 1.4.4 to Vince                    */
  69. /*==========================================================================*/
  70.  
  71. #include <dos.h>
  72. #include <stdio.h>
  73. #include <stdlib.h>
  74. #include <ctype.h>
  75. #include <string.h>
  76. #include "opusnode.h"
  77. #include "onodesup.h"
  78.  
  79. #define version "1.4.4"
  80.  
  81. char  buf[255];
  82.  
  83. char pwd_name[80] = "OPUSNODE.PWD";
  84. char        *bbsname       = "NODELIST.BBS";
  85. char        *idxname       = "NODELIST.IDX";
  86. char        *sysname       = "NODELIST.SYS";
  87.  
  88. char        *osidxname     = "OVERSEAS.IDX";
  89. char        *ossysname       = "OVERSEAS.SYS";
  90.  
  91. int listversion = 5;
  92.  
  93. /*--------------------------------------------------------------------------*/
  94. /* USAGE                                                                    */
  95. /*--------------------------------------------------------------------------*/
  96. void usage()
  97.    {
  98.  
  99.       cprintf("Takes the file NODELIST.BBS and creates NODELIST.SYS and NODELIST.IDX.\n");
  100.       cprintf("This program does NOT replace utilities such as `XLatlist'.  It is the\n");
  101.       cprintf("Opus version of Fido<tm>'s or SEAdog<tm>'s `Compiling the Nodelist.'\n");
  102.       cprintf("Those programs `compile' when you bring them up after changing the\n");
  103.       cprintf("nodelist.  With Opus, it is a separate program.\n\n");
  104.  
  105.       cprintf("No guarantee of compatibility with other systems is made.\n\n");
  106.  
  107.       cprintf("Options:    -f ... fix the SYS/IDX files.\n");
  108.       cprintf("                   Files are created only when you use this option.\n");
  109.       cprintf("            -d ... display only\n");
  110.       cprintf("            -s ... brief, only use systems with phone numbers that\n");
  111.       cprintf("                   don't look `international'.\n");
  112.       cprintf("            -o ... overseas only. Output=OVERSEAS.SYS/IDX\n");
  113.       cprintf("            -h ... Do not output HUB entries.\n");
  114. /*
  115.       cprintf("            -v <n> Select nodelist version number\n");
  116.       cprintf("                   Valid numbers are 5 and 6.\n");
  117.       cprintf("                   Eg. -v 6 selects version 6\n");
  118.       cprintf("                   Version 5 [default] is for Opus 0.00.\n");
  119.       cprintf("                   Version 6 is for Opus 1.00.\n");
  120. */
  121.       cprintf("\nNote:       The `-s' and `-o' options in OPUSnode are not\n");
  122.       cprintf("            compatible with the XLatList `NODASH' option.\n");
  123.       exit(1);
  124.  
  125.    }
  126.  
  127.  
  128.  
  129. /*--------------------------------------------------------------------------*/
  130. /* PHONE OK                                                                 */
  131. /*--------------------------------------------------------------------------*/
  132. int phone_ok(p)
  133.    char *p;
  134.    {
  135.       register int i;
  136.       char *tp;
  137.  
  138.       if ((tp = strchr(p,'u')) != NULL || (tp = strchr(p,'U')) != NULL)
  139.     {
  140.      tp = strlwr(strdup(tp));
  141.      if (strcmp(tp,"unpublished"))
  142.        strcpy(p,hostphone);
  143.      free(tp);
  144.     }
  145.  
  146.         if (brief)
  147.          {
  148.         i = strlen(p);
  149.             if (i==8) /* local */
  150.                {
  151.           if (    (isdigit(*(p+0))) &&
  152.             (isdigit(*(p+1))) &&
  153.             (isdigit(*(p+2))) &&
  154.                         (isHYPHN(*(p+3))) &&
  155.                         (isdigit(*(p+4))) &&
  156.                         (isdigit(*(p+5))) &&
  157.                         (isdigit(*(p+6))) &&
  158.                         (isdigit(*(p+7))) )
  159.                      return(1);
  160.                }
  161.             else if (i=14) /* long distance */
  162.                {
  163.                   if (  (isdigit(*(p+0))) &&
  164.                         (isHYPHN(*(p+1))) &&
  165.                         (isdigit(*(p+2))) &&
  166.                         (isdigit(*(p+3))) &&
  167.                         (isdigit(*(p+4))) &&
  168.                         (isHYPHN(*(p+5))) &&
  169.                         (isdigit(*(p+6))) &&
  170.                         (isdigit(*(p+7))) &&
  171.                         (isdigit(*(p+8))) &&
  172.                         (isHYPHN(*(p+9))) &&
  173.                         (isdigit(*(p+10))) &&
  174.                         (isdigit(*(p+11))) &&
  175.                         (isdigit(*(p+12))) &&
  176.                         (isdigit(*(p+13))) )
  177.                      return(1);
  178.                    
  179.                }
  180.             else if (i=12) /* long distance */
  181.                {
  182.                   if (
  183.                         (isdigit(*(p+0))) &&
  184.                         (isdigit(*(p+1))) &&
  185.                         (isdigit(*(p+2))) &&
  186.                         (isHYPHN(*(p+3))) &&
  187.                         (isdigit(*(p+4))) &&
  188.                         (isdigit(*(p+5))) &&
  189.                         (isdigit(*(p+6))) &&
  190.                         (isHYPHN(*(p+7))) &&
  191.                         (isdigit(*(p+8))) &&
  192.                         (isdigit(*(p+9))) &&
  193.                         (isdigit(*(p+10))) &&
  194.                         (isdigit(*(p+11)))
  195.                      )
  196.                      return(1);
  197.                }
  198.             return(0);
  199.          }
  200.        else if (overseas)
  201.          {
  202.         i = strlen(p);
  203.             if (i==8) /* u.s. local */
  204.                {
  205.                   if (  (!isdigit(*(p+0))) ||
  206.                         (!isdigit(*(p+1))) ||
  207.                         (!isdigit(*(p+2))) ||
  208.                         (!isHYPHN(*(p+3))) ||
  209.                         (!isdigit(*(p+4))) ||
  210.                         (!isdigit(*(p+5))) ||
  211.                         (!isdigit(*(p+6))) ||
  212.                         (!isdigit(*(p+7))) )
  213.                      return(1);
  214.                }
  215.             else if (i=14) /* u.s. long distance */
  216.                {
  217.                   if (  (!isdigit(*(p+0))) ||
  218.                         (!isHYPHN(*(p+1))) ||
  219.                         (!isdigit(*(p+2))) ||
  220.                         (!isdigit(*(p+3))) ||
  221.                         (!isdigit(*(p+4))) ||
  222.                         (!isHYPHN(*(p+5))) ||
  223.                         (!isdigit(*(p+6))) ||
  224.                         (!isdigit(*(p+7))) ||
  225.                         (!isdigit(*(p+8))) ||
  226.                         (!isHYPHN(*(p+9))) ||
  227.                         (!isdigit(*(p+10))) ||
  228.                         (!isdigit(*(p+11))) ||
  229.                         (!isdigit(*(p+12))) ||
  230.                         (!isdigit(*(p+13))) )
  231.                      return(1);
  232.                  }
  233.             else if (i=12) /* long distance */
  234.                {
  235.                   if (
  236.                         (!isdigit(*(p+0))) &&
  237.                         (!isdigit(*(p+1))) &&
  238.                         (!isdigit(*(p+2))) &&
  239.                         (!isHYPHN(*(p+3))) &&
  240.                         (!isdigit(*(p+4))) &&
  241.                         (!isdigit(*(p+5))) &&
  242.                         (!isdigit(*(p+6))) &&
  243.                         (!isHYPHN(*(p+7))) &&
  244.                         (!isdigit(*(p+8))) &&
  245.                         (!isdigit(*(p+9))) &&
  246.                         (!isdigit(*(p+10))) &&
  247.                         (!isdigit(*(p+11)))
  248.                      )
  249.                      return(1);
  250.                }
  251.             else return(1);
  252.             return(0);
  253.           } /* overseas */
  254.  
  255.      return(1);
  256.  
  257.    } /* phone ok */
  258.  
  259. /*--------------------------------------------------------------------------*/
  260. /* MAIN                                                                     */
  261. /*--------------------------------------------------------------------------*/
  262. void main( argc, argv )
  263.    int   argc;
  264.    char *argv[];
  265.    {
  266.  
  267.       int i;
  268.  
  269.       bbs            =
  270.       idx            =
  271.       sys            =  NULL;
  272.  
  273.       overseas       =
  274.       brief          =
  275.       fixing         =
  276.       skipped        =
  277.       net_count      =
  278.       hub_count      =
  279.       region_count   =
  280.       country_count  =
  281.       node_count     =  0;
  282.  
  283.       cprintf("OPUSnode [%s]  (c)Copyright 1986, Wynn Wagner III, All rights reserved.\n",version);
  284.       if (argc<2) usage();
  285.  
  286.       for(i=0;i<argc;i++)
  287.          {
  288.         char *sptr = argv[i];
  289.             if (sptr[0]=='-')
  290.                switch( toupper(sptr[1]) )
  291.                 {
  292.             case 'F'  : fixing   = 1; break;
  293.             case 'O'  : overseas = 1; break;
  294.             case 'S'  : brief    = 1; break;
  295.             case 'D'  :               break;
  296.             case 'H'  : skiphubs = 1; break;
  297.               /*  case 'V'  : listversion = atoi(argv[++i]); break; */
  298.                        default   : usage();
  299.                 } /* switch */
  300.          }
  301.  
  302.  
  303.  
  304.       if ( (brief) && (overseas) ) 
  305.     brief = overseas = 0;
  306.       else if (overseas)
  307.          {
  308.              
  309.             idxname = osidxname;
  310.             sysname = ossysname;
  311.  
  312.          }
  313.  
  314.       if (fixing)
  315.     cprintf("Compiling version %d nodelist\n",listversion);
  316.  
  317.       if (brief)
  318.     cprintf("Processing only national nodes\n");
  319.  
  320.       if (overseas)
  321.     cprintf("Processing only international nodes\n");
  322.  
  323.       if (skiphubs)
  324.     cprintf("Skipping hub entries\n");
  325.  
  326.       load_pwd(pwd_name);
  327.  
  328.       switch (listversion)
  329.     {
  330.      case 5 : makev5(); break;
  331.      case 6 : makev6(); break;
  332.          default : fatal("bad nodelist version!");
  333.     }
  334.  
  335.       if (bbs)
  336.          {
  337.             fclose(bbs);
  338.             chgfa(bbsname,0);
  339.          }
  340.  
  341.       if (idx)
  342.          {
  343.             fclose(idx);
  344.             chgfa(idxname,0);
  345.          }
  346.  
  347.       if (sys)
  348.          {
  349.             fclose(sys);
  350.             chgfa(sysname,0);
  351.          }
  352.  
  353.       cprintf("Entries     %5d\n", node_count     );
  354.       cprintf("Hubs        %5d\n", hub_count      );
  355.       cprintf("Nets        %5d\n", net_count      );
  356.       cprintf("Regions     %5d\n", region_count   );
  357.       cprintf("Countries   %5d\n", country_count  );
  358.       cprintf("Skipped     %5d\n", skipped        );
  359.    }
  360.  
  361.